% Floating-Point Exceptions
\section{浮點異常}

浮點異常在 OpenCL 中被去能了。
浮點異常的結果必須與 IEEE 754 中未使能異常的情況保持一致。
至於實作是否以及如何設置浮點標誌或引發異常\cnglo{impdef}。
對於查詢、清除或設置浮點標誌以及為異常設陷，本規範中沒有提供任何方法。
由於陷阱機制的性能問題、不可移植，
以及在矢量上下文中提供精準異常的不切實際（尤其是在異構硬件上），
即使具備這樣的特性，也不鼓勵使用。

然而，如果實作通過對標誌的擴展支持這種操作，
那麼初始化時應當將所有異常標誌清除，並將異常掩碼置位，
這樣當算術運算引發異常時就不會導致陷入。
然而，如果實作重用了下層的\cnglo{workitem}，
在進入\cnglo{kernel}前，實作不負責重新清除異常標誌或將異常掩碼重置為缺省值。
也就是說，
如果\cnglo{kernel}不檢查異常標誌，或者不使能陷阱，
那麼他就可以期望算術運算不會觸發陷阱。
而對於那些會檢查異常標誌或使能陷阱的\cnglo{kernel}，
在將控制權返還給實作時，他們要自己負責清除異常標誌以及去能所有陷阱。
是否以及何時重用下層的\cnglo{workitem}（以及伴隨的全局浮點狀態，如果有的話）\cnglo{impdef}。

此外， ISO / IEC 9899:TC2 中還定義了下列兩個算式：
\startigBase
\item \capi{math_errorhandling}、
\item \cmacro{MATH_ERREXCEPT}。
\stopigBase
本規範中，這兩個算式被保留使用，但目前還未定義。
如果實作通過擴充本規範支持了浮點異常，
則應該遵守 ISO / IEC 9899:TC2 中的定義。
